home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / util / time / date2day2.lha / d2d.c < prev    next >
C/C++ Source or Header  |  1995-04-21  |  3KB  |  145 lines

  1. /*  d2d (simple frontend for _date2day_)
  2.     (c) Armin.Obersteiner@giga.or.at
  3.  
  4.     input: <day>.<month>.<year>
  5.     output: Monday-Sunday, Error
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <stdlib.h>
  11. #include <math.h>
  12.  
  13. char *d[7]=
  14.     {
  15.         "Monday",
  16.         "Tuesday",
  17.         "Wednesday",
  18.         "Thursday",
  19.         "Friday",
  20.         "Saturday",
  21.         "Sunday"
  22.     };
  23.  
  24. char prg[256];
  25.  
  26. int date2day(int day,int month,int year);
  27. int sjahr(int year);
  28.  
  29. void main(int argc, char *argv[])
  30. {
  31.   int day,month,year;
  32.   char da[10],mo[10],ye[20];
  33.  
  34.   if(argc!=2)
  35.    {
  36.       printf("USAGE: %s <day>.<month>.<year>\n",argv[0]);
  37.       printf("       example: %s 27.3.1995\n",argv[0]);
  38.       printf("       first usable date: 1.1.1801\n");
  39.    }
  40.    else
  41.    {
  42.       int h;
  43.  
  44.       strcpy(prg,argv[0]);
  45.  
  46.       strcpy(da,strtok(argv[1],"."));
  47.       strcpy(mo,strtok(NULL,"."));
  48.       strcpy(ye,strtok(NULL," \0\n"));
  49.  
  50.       day=atoi(da);
  51.       month=atoi(mo);
  52.       year=atoi(ye);
  53.  
  54.       h=date2day(day,month,year);
  55.  
  56.       if(h)
  57.       {
  58.            printf("%s\n",d[h-1]);
  59.       }
  60.       else
  61.       {
  62.            printf("Date NOT valid !!\n");
  63.       }
  64.    }
  65. }
  66.  
  67. /*  date2day
  68.     (c) Armin.Obersteiner@giga.or.at
  69.  
  70.     input: <int> day,month,year
  71.     output:<int> 0,1-7
  72.  
  73.     0: error (before 1.1.1801 - this should be enough
  74.               if somebody knows a "day" before that please mail it to me)
  75.  
  76.     1-7: Monday-Sunday
  77. */
  78.  
  79. int date2day(int day,int month,int year)
  80. {
  81.     int md[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  82.  
  83.     int j,i=0;
  84.     int jahr=0;
  85.     int s;
  86.  
  87.     if(year<1801) return 0;
  88.     if( (month<1) || (month>12) ) return 0;
  89.     if(day<1) return 0;
  90.  
  91.     s=sjahr(year);
  92.  
  93.     if( (day>md[month-1]) )
  94.     {
  95.         if(!s) return 0;
  96.         if( (s) && (month=2) && (day>29) ) return 0;
  97.     }
  98.  
  99.     for(j=1801;j<year;j++) if(sjahr(j)) i++;
  100.  
  101.     jahr=(year-1801)*365+i+day;
  102.  
  103.     for(i=1;i<month;i++) jahr=jahr+md[i-1];
  104.     if(s && (month>2)) jahr=jahr+1;
  105.  
  106.     switch((int)fmod((double)jahr,(double)7))
  107.     {
  108.         case 0: return 4;     /* 1.1.1801 is a Thursday ->4 */
  109.                     break;
  110.         case 1: return 5;  
  111.                     break;
  112.         case 2: return 6;
  113.                     break;
  114.         case 3: return 7;
  115.                     break;
  116.         case 4: return 1;
  117.                     break;
  118.         case 5: return 2;
  119.                     break;
  120.         case 6: return 3;
  121.                     break;
  122.     }
  123. }
  124.  
  125. /*  sjahr
  126.     (c) Armin.Obersteiner@giga.or.at
  127.  
  128.     input:  <int> year
  129.     output: <int> 0,1
  130.  
  131.     0: normal year
  132.     1: leap-year
  133. */
  134.  
  135. int sjahr(int year)
  136. {
  137.     int schalt=0;
  138.  
  139.     if(fmod((double)year,(double)4)==0) schalt=1;
  140.     if(fmod((double)year,(double)100)==0) if(fmod((double)year,(double)400)!=0) schalt=0;
  141.  
  142.     return schalt;
  143. }
  144.  
  145.